package com.foeye.ws.client;


import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.foeye.ws.server.service.HelloWorld;
import com.foeye.ws.server.service.HelloWorldService;
import com.foeye.ws.server.service.User;

public class TestClient {
	
	/*
	 * wsimport 工具的使用
	 * 该工具是jdk自带的，位置：C:\jdk1.7\bin\wsimport.exe
	 * 
	 * 在命令提示符中使用如下命令：
	 * 		wsimport -keep -p com.demo.client http://localhost:8080/Demo/services/MyService?wsdl
	 * 命令参数说明:
	 * 		-d:生成客户端执行类的class文件的存放目录
	 * 		-s:生成客户端执行类的源文件的存放目录
	 * 		-p:定义生成类的包名
	 * 		-keep:生成java文件和class文件
	 * 
	 * =======================================================================================
	 * wsdl2java 工具的使用
	 * 	1： 下载apache-cxf-3.1.6.zip ，配置环境变量
	 * 		CXF_HOME
	 * 		在PATH中加入%CXF_HOME%\bin
	 * 2：wsdl2java用法：
	 * 		wsdl2java -p com -d src -all  aa.wsdl
	 * 		wsdl2java -d . http://localhost:8080/webservice/helloWorld?wsdl
	 * 
	 * 		-p  指定其wsdl的命名空间，也就是要生成代码的包名:
	 * 		-d  指定要产生代码所在目录
	 * 		-client 生成客户端测试web service的代码
	 * 		-server 生成服务器启动web  service的代码
	 * 		-impl 生成web service的实现代码
	 * 		-ant  生成build.xml文件
	 * 		-all 生成所有开始端点代码：types,service proxy,,service interface, server mainline, 
	 * 												client mainline, implementation object, and an Ant build.xml file.
	 * 
	 */

	public static void main(String[] args) {
		client03();

	}
	
	public static void client01() {
		/**
		 * 使用JaxWsProxyFactoryBean 调用接口
		 * 		要用wsimport 工具导出HelloWorld.class 接口类，放入工程中使用
		 */
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(HelloWorld.class);
		factory.setAddress("http://localhost:8080/webservice/helloWorld?wsdl");
		HelloWorld client = (HelloWorld) factory.create();
		String response = client.sayHello();
		System.out.println("Response:" + response);
	}
	
	public static void client02() {
		/**
		 * 使用wmimport 工具生成的xxxService 类（xxx表示接口名称，例如：HelloWorld）
		 * 的getxxxPort()方法可以直接生成xxx接口的实现类
		 */
		HelloWorldService helloWorldService = new HelloWorldService();
		HelloWorld helloWorld = helloWorldService.getHelloWorldPort();
		User user = helloWorld.getUser("12");
		
		System.out.println("name:" + user.getName() + "\n age:" + user.getAge());
	}
	
	public static void client03() {
		/**
		 * 使用Spring 集成cxf 调用接口
		 * 		spring-cxf-service.xml
		 * 				<jaxws:client id="helloWorld" serviceClass="com.foeye.ws.server.service.HelloWorld"
		 *					address="http://localhost:8080/webservice/helloWorld" />
		 *				id: springbean 标识
		 *				serviceClass: 接口类地址
		 *				address: 接口类访问地址
		 *
		 * 通过Spring获得接口类，可直接调用方法
		 *
		 * 前提也是得wsimport 获得接口类，并导入工程中！
		 * 
		 */
		@SuppressWarnings("resource")
		ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-cxf-service.xml");  
		HelloWorld service = ctx.getBean("helloWorld", HelloWorld.class);  
        User user = service.getUser("1");
        
        System.out.println("This is get User by CXF and spring....");
        System.out.println("name:" + user.getName() + "\n age:" + user.getAge());
	}

}
